#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#include "kernellist.h"

// 大结构体
struct mynode
{
    int data;
    char ch;
    float f;
    struct node n; // 小结构体
};

struct mynode * new_node(int num)
{
    struct mynode *new = calloc(1, sizeof(struct mynode));
    if(new != NULL)
    {
        new->data = num;
        init_list(&new->n);
    }
    return new;
}

int main(int argc, char const *argv[])
{
    struct mynode *head = calloc(1, sizeof(struct mynode));
    if(head != NULL)
    {
        // 初始化头结点
        init_list(&head->n);
        // INIT_LIST_HEAD(&head->n);
    }

    for(int i=1; i<=5; i++)
        list_add_tail(&head->n, &new_node(i)->n);
    
    // 遍历输出这些节点
    list ptr;
    struct mynode *p;
    list_for_each(ptr, &head->n)
    {
        // ptr --> 某个小结构体
        ((struct mynode *)((char *)ptr - (long)&(((struct mynode *)0))->n)  )->data;
        p = list_entry(ptr, struct mynode, n);

        // long: 多少个字节？ = 系统的字长 64位/32位
        //   * : 多少个字节？ = 系统的字长 64位/32位

    }
    printf("\n");

    return 0;
}
